// users表操作
const { M_user } = require('../models/index')
const { sign } = require('jsonwebtoken')

const util = require('../utils/index') // 工具函数
const { secret } = require('../utils/config')
const { req_phone, req_email } = require('../utils/req')

// 用户账号判断
const judge_username = (username, ctx) => {
    // 账号非空校验
    if (!util.isEmpty(username)) {
        ctx.body = {
            status: false,
            msg: '用户名不能为空'
        }

        return { status: false, ctx }
    }

    // 账号格式校验
    if (!util.isString(username) || username.length < 6 || username.length > 12) {
        ctx.body = {
            status: false,
            msg: '用户名格式不对，长度为6-12位'
        }

        return { status: false, ctx }
    }

    return { status: true, ctx }
}

// 密码校验
const judge_password = (password, ctx) => {
    // 密码非空校验
    if (!util.isEmpty(password)) {
        ctx.body = {
            status: false,
            msg: '用户密码不能为空'
        }
        return { status: false, ctx }
    }

    // 密码格式校验
    if (password.toString().length < 6 || password.toString().length > 20) {
        ctx.body = {
            status: false,
            msg: '密码格式不对，长度为6-20位'
        }
        return { status: false, ctx }
    }

    return { status: true, ctx }
}

// 用户注册
const user_create = async (where, ctx) => {
    await M_user.create(where).then(res => {
        if (res) {
            ctx.body = {
                status: true,
                results: res,
                msg: '注册成功，请重新登录！'
            }
        } else {
            ctx.body = {
                status: false,
                msg: '注册失败'
            }
        }
    }).catch(err => {
        ctx.body = {
            status: false,
            msg: '注册时出现异常'
        }
        console.error('异常信息<<<<<<', err);
    })
}

// 用户修改
// const user_update = async (params, ctx) => {
//     let newParams = {}
//     if (params.username) {
//         newParams.username = params.username
//     }
//     if (params.password) {
//         newParams.password = params.password
//     }

//     newParams.update_time = params.update_time

//     await M_user.updateOne({ _id: params._id }, newParams).then(res => {
//         if (res.n == 1) {
//             ctx.body = {
//                 status: true,
//                 results: newParams,
//                 msg: '修改成功'
//             }
//         } else {
//             ctx.body = {
//                 status: false,
//                 msg: '修改失败，请传入正确的id'
//             }
//         }
//     }).catch(err => {
//         ctx.body = {
//             status: false,
//             msg: '修改时出现异常'
//         }
//         console.error('异常信息<<<<<<<', err);
//     })
// }

/**
 * 修改用户2.0
 * 用户账号不能修改，
 * 密码、手机号、邮箱、头像可以修改
*/
const user_update = async ctx => {
    let { _id, password = undefined, phone = undefined, email = undefined, avatar = undefined } = ctx.request.body

    if (!_id) {
        return ctx.body = {
            status: false,
            msg: '修改失败，缺少参数：用户id'
        }
    }

    let params = {}

    // 密码校验
    if (password) {
        password = util.delTrim(password)

        if(password.toString().length < 6 || password.toString().length > 20) {
            return ctx.body = {
                status: false,
                msg: '密码修改失败，长度为6 - 20位！'
            }
        }

        params.password = password
    }

    // 手机校验
    if (phone) {
        phone = util.delTrim(phone)

        if (!req_phone.test(phone)) {
            return ctx.body = {
                status: false,
                msg: '请输入正确的手机号码！'
            }
        }

        params.phone = phone
    }

    // 邮箱校验
    if (email) {
        email = util.delTrim(email)

        if (!req_email.test(email)) {
            return ctx.body = {
                status: false,
                msg: '请输入正确的电子邮箱！'
            }
        }

        params.email = email
    }

    // 头像 
    if (avatar) {
        params.avatar = avatar
    }

    // 修改时间
    let update_time = util.nowDate(1)
    params.update_time = update_time

    // 修改用户资料
    await M_user.updateOne({ _id }, params).then(res => {
        if (res.n > 0) {
            return ctx.body = {
                status: true,
                msg: '修改成功',
                results: params
            }
        } else {
            return ctx.body = {
                status: false,
                msg: '修改失败，请传入正确的id'
            }
        }
    }).catch(err => {
        console.error('异常信息<<<<<<<', err);
        return ctx.body = {
            status: false,
            msg: '修改时出现异常'
        }
    })

    
}

// 用户删除
const user_del = async (where, ctx) => {
    await M_user.findOneAndDelete(where).then(res => {
        if(res) {
            ctx.body = {
                status: true,
                results: res,
                msg: '删除成功'
            }
        }else {
            ctx.body = {
                status: false,
                msg: '删除失败，请确认id'
            }

        }
    }).catch(err => {
        ctx.body = {
            status: false,
            msg: '删除时出现异常'
        }
        console.error( '异常信息<<<<<<<', err );
    })
}

// 用户查询
const user_search = async (where, ctx) => {
    // 查询全部
    if(where.state == 'all') {
        await M_user.find().then(res => {
            if(res) {
                ctx.body = {
                    status: true,
                    results: res,
                    msg: '查询用户成功'
                }
            }else {
                ctx.body = {
                    status: false,
                    msg: '查询失败，请重试'
                }
            }
        }).catch(err => {
            ctx.body = {
                status: false,
                msg: '查询时出现异常'
            }
            console.error( '异常信息<<<<<<<', err );
        })
    }
    
    // 查询单个
    if(!where.state || where.state != 'all') {
        await M_user.findOne({_id: where._id}).then(res => {
            if(res) {
                ctx.body = {
                    status: true,
                    results: res,
                    msg: '查询用户成功'
                }
            }else {
                ctx.body = {
                    status: false,
                    msg: '查询失败，该用户不存在'
                }
            }
        }).catch(err => {
            ctx.body = {
                status: false,
                msg: '查询时出现异常'
            }
            console.error( '异常信息<<<<<<<', err );
        })
    }
}

// 用户登录
const user_login = async (where, ctx) => {
    await M_user.findOne(where).then(res => {
        if(res) {
            let { _id } = res
            let token = sign({_id}, secret, { expiresIn: 3600 * 12 }) 

            ctx.body = {
                status: true,
                results: res,
                token,
                msg: "登录成功"
            }
        }else {
            ctx.body = {
                status: false,
                msg: "登录失败，账号或者密码错误"
            }
        }
    }).catch(err => {
        ctx.body = {
            status: false,
            msg: "登录时出现异常"
        }
        console.error( '异常信息<<<<<<<', err );
    })
}

module.exports = {
    judge_username, 
    judge_password, 
    user_create, 
    user_update, 
    user_del, 
    user_search, 
    user_login
}
